package Leetcode.lc025;

import Leetcode.tools.ListNode;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Stack;

/***
 * 给你链表的头节点 head ，每 k 个节点一组进行翻转，请你返回修改后的链表。
 *
 * k 是一个正整数，它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍，那么请将最后剩余的节点保持原有顺序。
 *
 * 你不能只是单纯的改变节点内部的值，而是需要实际进行节点交换。
 */
public class Sloution {
    public ListNode reverseKGroup(ListNode head, int k) {
        Deque<Integer> deque = new LinkedList<>();
        ListNode dummy = new ListNode();
        ListNode cur=dummy;
        while(head!=null){
            deque.push(head.val);
            head=head.next;
            if(deque.size()==k){
              while (!deque.isEmpty()){
                  cur.next=new ListNode(deque.pop());
                  cur=cur.next;
              }
            }

        }
        while(!deque.isEmpty()){
            cur.next=new ListNode(deque.pollLast());
            cur=cur.next;
        }
        return dummy.next;
    }

    public static void main(String[] args) {
        ListNode head = new ListNode().listBuilder(new int[]{1,2,3,4,5});
        int target=2;
        Sloution sloution = new Sloution();
        ListNode listNode = sloution.reverseKGroup(head, 2);
        System.out.println(listNode);

    }
}
